AudioSpectrogram =================== 音频频谱(Audio Spectrogram)是一种常用的音频信号特征表示方式,通过将时域音频信号转换为频域信号,提供了时间和频率的双重信息。 参数说明: - **params** - 频谱图参数配置结构体指针 - **workspace** - 工作空间缓冲区结构体指针 - **core_mask** - 核掩码,指定参与计算的处理器核(仅共享存储版本) **结构体定义:** .. code-block:: c :linenos: typedef struct { // 输入 float* input; // 输入数据地址 int input_len; // 输入数据长度 // 输出 float* output; // 输出数据地址 int* output_shape; // 输出数据形状 // 配置参数 int pad; // 填充大小 WindowType window_type; // 窗函数类型 int n_fft; // FFT点数 int hop_length; // 帧移长度 int win_length; // 窗长度 float power; // 功率值 bool normalized; // 是否归一化 bool center; // 是否中心化 BorderType pad_mode; // 填充模式 bool onesided; // 是否单边频谱 } SpectrogramParam; typedef struct { float* fft_window; // FFT窗函数缓冲区 float* fft_window_later; // 后续FFT窗缓冲区 float* input_data_pad; // 填充后的输入数据 float* input_data; // 输入数据缓冲区 float* input_win; // 加窗输入数据 float* exp_complex; // 复数指数缓冲区 float* spec_f; // 频谱频率缓冲区 float* output_onsided; // 单边输出缓冲区 } WorkspaceParam; 支持平台: ``FT78NE`` ``MT7004`` .. note:: - FT78NE 支持 fp32 - MT7004 支持 fp32 **共享存储版本:** .. c:function:: void fp_audio_spectrogram_s(SpectrogramParam* params, WorkspaceParam* workspace, int core_mask) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 30 //FT78NE示例 #include int main(int argc, char* argv[]) { float* input_data = (float*)0x81000000; float* output = (float*)0x82000000; int output_shape[2] = {0, 0, 0}; SpectrogramParam* spec_params = (SpectrogramParam*)0x83200000; WorkspaceParam* spec_workspace = (WorkspaceParam*)0x83400000; // 结构体 SpectrogramParam spec_params->input = input_data; spec_params->input_len = 4000; spec_params->output = output; spec_params->output_shape = output_shape; spec_params->pad = 0; spec_params->window_type = kHann; spec_params->n_fft = 32; spec_params->hop_length = 16; spec_params->win_length = 32; spec_params->power = 2.0f; spec_params->normalized = false; spec_params->center = false; spec_params->pad_mode = kConstant; spec_params->onesided = true; int core_mask = 0xff; //spec_workspace里每个中间缓冲区指针分配地址 //... fp_audio_spectrogram_s(spec_params, spec_workspace, core_mask); return 0; } **私有存储版本:** .. c:function:: void fp_audio_spectrogram_p(SpectrogramParam* params, WorkspaceParam* workspace) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 29 //FT78NE示例 #include int main(int argc, char* argv[]) { float* input_data = (float*)0x10810000; float* output_mfcc = (float*)0x10820000; SpectrogramParam* spec_params = (SpectrogramParam*)0x10830000; WorkspaceParam* spec_workspace = (WorkspaceParam*)0x10840000; int output_shape[2] = {0, 0, 0}; spec_params->input = input_data; spec_params->input_len = 4000; spec_params->output = output; spec_params->output_shape = output_shape; spec_params->pad = 0; spec_params->window_type = kHann; spec_params->n_fft = 32; spec_params->hop_length = 16; spec_params->win_length = 32; spec_params->power = 2.0f; spec_params->normalized = false; spec_params->center = false; spec_params->pad_mode = kConstant; spec_params->onesided = true; //为spec_workspace里每个中间缓冲区指针分配地址 //... fp_audio_spectrogram_p(spec_params, spec_workspace); return 0; }